{
__u8 cpu_model = current_cpu_data.x86_model;
- if ((cpu_model > 6) || (cpu_model == 5))
+ if ((cpu_model > 6) || (cpu_model == 5)) {
+ printk("xenoprof: Initialization failed. "
+ "Intel processor model %d for pentium 4 family is not "
+ "supported\n", cpu_model);
return 0;
+ }
#ifndef CONFIG_SMP
strncpy (cpu_type, "i386/p4", XENOPROF_CPU_TYPE_SIZE - 1);
{
__u8 cpu_model = current_cpu_data.x86_model;
- if (cpu_model > 0xd)
+ if (cpu_model > 0xd) {
+ printk("xenoprof: Initialization failed. "
+ "Intel processor model %d for P6 class family is not "
+ "supported\n", cpu_model);
return 0;
+ }
if (cpu_model == 9) {
strncpy (cpu_type, "i386/p6_mobile", XENOPROF_CPU_TYPE_SIZE - 1);
__u8 family = current_cpu_data.x86;
int prim = 0;
- if (!cpu_has_apic)
+ if (!cpu_has_apic) {
+ printk("xenoprof: Initialization failed. No apic.\n");
return -ENODEV;
+ }
if (primary_profiler == NULL) {
/* For now, only dom0 can be the primary profiler */
switch (family) {
default:
+ printk("xenoprof: Initialization failed. "
+ "AMD processor family %d is not "
+ "supported\n", family);
return -ENODEV;
case 6:
model = &op_athlon_spec;
break;
default:
+ printk("xenoprof: Initialization failed. "
+ "Intel processor family %d is not "
+ "supported\n", family);
return -ENODEV;
}
break;
default:
+ printk("xenoprof: Initialization failed. "
+ "Unsupported processor. Unknown vendor %d\n",
+ vendor);
return -ENODEV;
}
return 0;
}
-#define PRIV_OP(op) ( (op == XENOPROF_set_active) \
- || (op == XENOPROF_reserve_counters) \
- || (op == XENOPROF_setup_events) \
- || (op == XENOPROF_start) \
- || (op == XENOPROF_stop) \
- || (op == XENOPROF_release_counters) \
- || (op == XENOPROF_shutdown))
-
+#define NONPRIV_OP(op) ( (op == XENOPROF_init) \
+ || (op == XENOPROF_enable_virq) \
+ || (op == XENOPROF_disable_virq) \
+ || (op == XENOPROF_get_buffer))
+
int do_xenoprof_op(int op, XEN_GUEST_HANDLE(void) arg)
{
int ret = 0;
+
+ if ( (op < 0) || (op>XENOPROF_last_op) )
+ {
+ printk("xenoprof: invalid operation %d for domain %d\n",
+ op, current->domain->domain_id);
+ return -EINVAL;
+ }
- if ( PRIV_OP(op) && (current->domain != primary_profiler) )
+ if ( !NONPRIV_OP(op) && (current->domain != primary_profiler) )
{
printk("xenoprof: dom %d denied privileged operation %d\n",
current->domain->domain_id, op);